/**
 * 响应模块
 */
const Response = require('entity/response'); // 响应对象

// 状态码
const codes = {
  404: '资源未找到',
  408: '请求超时',
  500: '服务器异常',
  6000: '已成功',
  8001: '验证未通过',
  8002: '未获取到数据',
  9000: '登录失效'
}

/**
 * 通用响应函数
 * @param {Object} req
 * @param {Object} res
 * @param {Object} err
 * @param {Object} data
 * @param {Number} code
 * 响应对象 new Response(返回数据, 状态码, 错误对象, 错误提示)
 * 响应对象 new Response(result, code, error, remark)
 */
const answer = async (res, data, err, code, remark) => {
  let response = null;
  if (err) {
    response = new Response(data, 500, err, codes[500]);
    console.error('———————————————— 异常信息 begin ——————————————');
    console.error(err); // 打印异常信息
    console.error('———————————————— 异常信息 end ————————————————');
  } else {
    if (code) {
      switch (code){
        case 8001: // 验证未通过-返回验证信息
          response = new Response(data, code, null, remark);
          break;
        default:
          response = new Response(data, code, null, codes[code]);
          break;
      }
    } else {
      response = new Response(data, 6000, null, codes[6000]);
    }
  }
  // 如果没有超时-将响应对象发送给客户端
  if (res.statusCode !== 408) {
    code === 408 ? res.status(408).json(response) : res.json(response);
  }
}

module.exports = answer;
